package com.alisls.demo.sso.server.util;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 描述
 *
 * @author Ke Wang
 */
public class TokenUtil {

    private static Map<String, List<SSOClient>> tokenMap = new HashMap<>();

    /**
     * 校验token是否存在
     * @param token 会话
     * @return 是否村子
     */
    public static boolean validToken(String token) {
        return tokenMap.containsKey(token);
    }

    /**
     * 保存一个SSOClient
     * @param token 令牌
     * @param ssoClient 客户端
     */
    public static void save(String token, SSOClient ssoClient) {
        List<SSOClient> ssoClients = tokenMap.get(token);
        if (ssoClients == null) {
            ssoClients = new ArrayList<>();
        }
        if (ssoClient != null) {
            ssoClients.add(ssoClient);
        }
        tokenMap.put(token, ssoClients);
    }

    /**
     * 获取所有共享token的客户端集合
     * @param token 令牌
     * @return 客户端集合
     */
    public static List<SSOClient> get(String token) {
        return tokenMap.get(token);
    }

    /**
     * 删除所有共享token的客户端集合
     * @param token
     */
    public static void remove(Object token) {
        tokenMap.remove(token);
    }

    @Getter
    @Setter
    @AllArgsConstructor
    public static class SSOClient {

        /**
         * 客户端登出地址
         */
        private String clientLogoutUrl;

        /**
         * 客户端sessionId
         */
        private String sessionId;
    }

}
